<!DOCTYPE html>
<html lang="zh-CN" data-theme="light">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <meta name="generator" content="VuePress 2.0.0-beta.48" />
    <meta name="theme" content="VuePress Theme Hope" />
    <meta property="og:url" content="https://vuepress-theme-hope-v2-demo.mrhope.site/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html"><meta property="og:site_name" content="主题演示"><meta property="og:title" content="计算机网络"><meta property="og:type" content="article"><meta property="og:locale" content="zh-CN"><meta property="og:locale:alternate" content="en-US"><meta property="article:tag" content="计算机网络"><title>计算机网络 | 主题演示</title><meta name="description" content="vuepress-theme-hope 的演示">
    <style>
      :root {
        --bg-color: #fff;
      }

      html[data-theme="dark"] {
        --bg-color: #1d2025;
      }

      html,
      body {
        background-color: var(--bg-color);
      }
    </style>
    <script>
      const userMode = localStorage.getItem("vuepress-theme-hope-scheme");
      const systemDarkMode =
        window.matchMedia &&
        window.matchMedia("(prefers-color-scheme: dark)").matches;

      if (userMode === "dark" || (userMode !== "light" && systemDarkMode)) {
        document.querySelector("html").setAttribute("data-theme", "dark");
      }
    </script>
    <link rel="stylesheet" href="/assets/style.dbbe025d.css">
    <link rel="modulepreload" href="/assets/app.e732cc94.js"><link rel="modulepreload" href="/assets/计算机网络.html.724e0903.js"><link rel="modulepreload" href="/assets/plugin-vue_export-helper.21dcd24c.js"><link rel="modulepreload" href="/assets/计算机网络.html.1a7f7d0e.js"><link rel="prefetch" href="/assets/home.html.d675c4b6.js"><link rel="prefetch" href="/assets/intro.html.684ef626.js"><link rel="prefetch" href="/assets/index.html.e8ffec66.js"><link rel="prefetch" href="/assets/slide.html.050a6f1e.js"><link rel="prefetch" href="/assets/disable.html.b507ecac.js"><link rel="prefetch" href="/assets/encrypt.html.762116d5.js"><link rel="prefetch" href="/assets/markdown.html.5acf7a9a.js"><link rel="prefetch" href="/assets/page.html.141b0147.js"><link rel="prefetch" href="/assets/index.html.75bf4c69.js"><link rel="prefetch" href="/assets/article10.html.f5ea4d77.js"><link rel="prefetch" href="/assets/article11.html.6339c214.js"><link rel="prefetch" href="/assets/article12.html.5ac86a8f.js"><link rel="prefetch" href="/assets/article9.html.666c37a0.js"><link rel="prefetch" href="/assets/home.html.6e361c52.js"><link rel="prefetch" href="/assets/index.html.2d9b62a7.js"><link rel="prefetch" href="/assets/slide.html.6b655fa0.js"><link rel="prefetch" href="/assets/article1.html.f835efef.js"><link rel="prefetch" href="/assets/article2.html.e4775195.js"><link rel="prefetch" href="/assets/article3.html.bfdf934f.js"><link rel="prefetch" href="/assets/article4.html.69bccee4.js"><link rel="prefetch" href="/assets/article5.html.c7ac5439.js"><link rel="prefetch" href="/assets/article6.html.880c0652.js"><link rel="prefetch" href="/assets/article7.html.2cae84db.js"><link rel="prefetch" href="/assets/article8.html.6c46837c.js"><link rel="prefetch" href="/assets/disable.html.f629efab.js"><link rel="prefetch" href="/assets/encrypt.html.58d61689.js"><link rel="prefetch" href="/assets/markdown.html.779c42bf.js"><link rel="prefetch" href="/assets/page.html.125d74f5.js"><link rel="prefetch" href="/assets/index.html.3db704fb.js"><link rel="prefetch" href="/assets/article10.html.b5d65d2d.js"><link rel="prefetch" href="/assets/article11.html.b2cf93ee.js"><link rel="prefetch" href="/assets/article12.html.94e1cf22.js"><link rel="prefetch" href="/assets/article9.html.90cf2a62.js"><link rel="prefetch" href="/assets/Docker.html.de1063e8.js"><link rel="prefetch" href="/assets/Java基础.html.6c0b0f5c.js"><link rel="prefetch" href="/assets/Java容器.html.77448ff5.js"><link rel="prefetch" href="/assets/JUC.html.76307785.js"><link rel="prefetch" href="/assets/JVM.html.0bb340ff.js"><link rel="prefetch" href="/assets/Linux.html.90ea1c3b.js"><link rel="prefetch" href="/assets/MySQL.html.73ae62bf.js"><link rel="prefetch" href="/assets/NIO与Netty.html.a73529b1.js"><link rel="prefetch" href="/assets/index.html.2a38d188.js"><link rel="prefetch" href="/assets/Redis.html.78427b11.js"><link rel="prefetch" href="/assets/主流框架.html.f21f66df.js"><link rel="prefetch" href="/assets/分布式与高性能高可用.html.38ab4746.js"><link rel="prefetch" href="/assets/操作系统.html.76b600e3.js"><link rel="prefetch" href="/assets/智力题.html.ec368cec.js"><link rel="prefetch" href="/assets/系统设计.html.fb8f2074.js"><link rel="prefetch" href="/assets/设计模式.html.cd48ccf5.js"><link rel="prefetch" href="/assets/article1.html.ca54de60.js"><link rel="prefetch" href="/assets/article2.html.a99d479f.js"><link rel="prefetch" href="/assets/article3.html.5a2797ee.js"><link rel="prefetch" href="/assets/article4.html.3ac5a509.js"><link rel="prefetch" href="/assets/article5.html.c09d20ba.js"><link rel="prefetch" href="/assets/article6.html.c9e59f52.js"><link rel="prefetch" href="/assets/article7.html.948e77cc.js"><link rel="prefetch" href="/assets/article8.html.28c3977f.js"><link rel="prefetch" href="/assets/404.html.8a909211.js"><link rel="prefetch" href="/assets/index.html.690b188a.js"><link rel="prefetch" href="/assets/index.html.6085d793.js"><link rel="prefetch" href="/assets/index.html.932078ca.js"><link rel="prefetch" href="/assets/index.html.bb629f30.js"><link rel="prefetch" href="/assets/index.html.92b2d70c.js"><link rel="prefetch" href="/assets/index.html.82840baf.js"><link rel="prefetch" href="/assets/index.html.85406aa8.js"><link rel="prefetch" href="/assets/index.html.7b9124b8.js"><link rel="prefetch" href="/assets/index.html.e1e2a548.js"><link rel="prefetch" href="/assets/index.html.a9a69593.js"><link rel="prefetch" href="/assets/index.html.5b51b72b.js"><link rel="prefetch" href="/assets/index.html.ec7f0295.js"><link rel="prefetch" href="/assets/index.html.e14e2286.js"><link rel="prefetch" href="/assets/index.html.e89216be.js"><link rel="prefetch" href="/assets/index.html.c0adb933.js"><link rel="prefetch" href="/assets/index.html.a45798a3.js"><link rel="prefetch" href="/assets/index.html.e99c516b.js"><link rel="prefetch" href="/assets/index.html.f6be7fb4.js"><link rel="prefetch" href="/assets/index.html.6812b391.js"><link rel="prefetch" href="/assets/index.html.4bae905e.js"><link rel="prefetch" href="/assets/index.html.0599248b.js"><link rel="prefetch" href="/assets/index.html.963b2596.js"><link rel="prefetch" href="/assets/index.html.bbd9778f.js"><link rel="prefetch" href="/assets/index.html.c6a7a8d4.js"><link rel="prefetch" href="/assets/index.html.13391f8f.js"><link rel="prefetch" href="/assets/index.html.4b0a0f3f.js"><link rel="prefetch" href="/assets/index.html.bbd06d0d.js"><link rel="prefetch" href="/assets/index.html.9a4d8710.js"><link rel="prefetch" href="/assets/index.html.dfdff039.js"><link rel="prefetch" href="/assets/index.html.cd21ad11.js"><link rel="prefetch" href="/assets/index.html.72b3c545.js"><link rel="prefetch" href="/assets/index.html.0262e65d.js"><link rel="prefetch" href="/assets/index.html.8905ca40.js"><link rel="prefetch" href="/assets/index.html.98e54f53.js"><link rel="prefetch" href="/assets/index.html.707c5120.js"><link rel="prefetch" href="/assets/index.html.daf3ede2.js"><link rel="prefetch" href="/assets/index.html.ae769b93.js"><link rel="prefetch" href="/assets/index.html.59a75e1b.js"><link rel="prefetch" href="/assets/index.html.efb1d101.js"><link rel="prefetch" href="/assets/index.html.898df6f8.js"><link rel="prefetch" href="/assets/index.html.6339ac7f.js"><link rel="prefetch" href="/assets/index.html.0ffdd311.js"><link rel="prefetch" href="/assets/index.html.454f52cf.js"><link rel="prefetch" href="/assets/index.html.d8a5ddde.js"><link rel="prefetch" href="/assets/index.html.3be06723.js"><link rel="prefetch" href="/assets/index.html.1d180388.js"><link rel="prefetch" href="/assets/index.html.337241b0.js"><link rel="prefetch" href="/assets/index.html.0be3cd3f.js"><link rel="prefetch" href="/assets/index.html.8e5505d4.js"><link rel="prefetch" href="/assets/index.html.ffdd1452.js"><link rel="prefetch" href="/assets/index.html.d3825f4c.js"><link rel="prefetch" href="/assets/home.html.ccae7996.js"><link rel="prefetch" href="/assets/intro.html.fd34d8e1.js"><link rel="prefetch" href="/assets/index.html.ba786069.js"><link rel="prefetch" href="/assets/slide.html.0df38877.js"><link rel="prefetch" href="/assets/disable.html.6465acbf.js"><link rel="prefetch" href="/assets/encrypt.html.f697c2c7.js"><link rel="prefetch" href="/assets/markdown.html.f534aa4c.js"><link rel="prefetch" href="/assets/page.html.d91d46f6.js"><link rel="prefetch" href="/assets/index.html.b66745bd.js"><link rel="prefetch" href="/assets/article10.html.a245f19a.js"><link rel="prefetch" href="/assets/article11.html.c7128e02.js"><link rel="prefetch" href="/assets/article12.html.abd25c27.js"><link rel="prefetch" href="/assets/article9.html.7bba6b9f.js"><link rel="prefetch" href="/assets/home.html.eb29b64c.js"><link rel="prefetch" href="/assets/index.html.a51898c1.js"><link rel="prefetch" href="/assets/slide.html.4db0d16b.js"><link rel="prefetch" href="/assets/article1.html.8aeaf420.js"><link rel="prefetch" href="/assets/article2.html.1b3af75b.js"><link rel="prefetch" href="/assets/article3.html.83bc62c6.js"><link rel="prefetch" href="/assets/article4.html.9c3e20ef.js"><link rel="prefetch" href="/assets/article5.html.a86dfd69.js"><link rel="prefetch" href="/assets/article6.html.1005b310.js"><link rel="prefetch" href="/assets/article7.html.e62a511b.js"><link rel="prefetch" href="/assets/article8.html.5d7e1f67.js"><link rel="prefetch" href="/assets/disable.html.9d48f34e.js"><link rel="prefetch" href="/assets/encrypt.html.69059b41.js"><link rel="prefetch" href="/assets/markdown.html.f8f89db4.js"><link rel="prefetch" href="/assets/page.html.f139635c.js"><link rel="prefetch" href="/assets/index.html.126e92a0.js"><link rel="prefetch" href="/assets/article10.html.f00bfbec.js"><link rel="prefetch" href="/assets/article11.html.4e4aea0e.js"><link rel="prefetch" href="/assets/article12.html.ed056ef8.js"><link rel="prefetch" href="/assets/article9.html.c3cb96a4.js"><link rel="prefetch" href="/assets/Docker.html.f45c96a5.js"><link rel="prefetch" href="/assets/Java基础.html.56267f30.js"><link rel="prefetch" href="/assets/Java容器.html.5139503a.js"><link rel="prefetch" href="/assets/JUC.html.ebe8f287.js"><link rel="prefetch" href="/assets/JVM.html.c448b42c.js"><link rel="prefetch" href="/assets/Linux.html.43840acf.js"><link rel="prefetch" href="/assets/MySQL.html.eba28d84.js"><link rel="prefetch" href="/assets/NIO与Netty.html.66d42188.js"><link rel="prefetch" href="/assets/index.html.f3cc61a2.js"><link rel="prefetch" href="/assets/Redis.html.d810a669.js"><link rel="prefetch" href="/assets/主流框架.html.48ca457c.js"><link rel="prefetch" href="/assets/分布式与高性能高可用.html.a85c8cdb.js"><link rel="prefetch" href="/assets/操作系统.html.c2f0370c.js"><link rel="prefetch" href="/assets/智力题.html.4d751983.js"><link rel="prefetch" href="/assets/系统设计.html.c1542e9d.js"><link rel="prefetch" href="/assets/设计模式.html.2465754d.js"><link rel="prefetch" href="/assets/article1.html.ac18bda1.js"><link rel="prefetch" href="/assets/article2.html.051f8867.js"><link rel="prefetch" href="/assets/article3.html.ebe7849b.js"><link rel="prefetch" href="/assets/article4.html.a4dbc976.js"><link rel="prefetch" href="/assets/article5.html.395a5403.js"><link rel="prefetch" href="/assets/article6.html.74c49cbf.js"><link rel="prefetch" href="/assets/article7.html.bf053e97.js"><link rel="prefetch" href="/assets/article8.html.7213c414.js"><link rel="prefetch" href="/assets/404.html.22aaa4fc.js"><link rel="prefetch" href="/assets/index.html.bd6ff77c.js"><link rel="prefetch" href="/assets/index.html.a7880d9d.js"><link rel="prefetch" href="/assets/index.html.f5f99f6a.js"><link rel="prefetch" href="/assets/index.html.561cd4cd.js"><link rel="prefetch" href="/assets/index.html.2b2206fe.js"><link rel="prefetch" href="/assets/index.html.ec6b7467.js"><link rel="prefetch" href="/assets/index.html.146ab8c4.js"><link rel="prefetch" href="/assets/index.html.f201f6e8.js"><link rel="prefetch" href="/assets/index.html.a1a6c5d4.js"><link rel="prefetch" href="/assets/index.html.61b33c23.js"><link rel="prefetch" href="/assets/index.html.8640e57f.js"><link rel="prefetch" href="/assets/index.html.c3d0fc1d.js"><link rel="prefetch" href="/assets/index.html.461f8cdf.js"><link rel="prefetch" href="/assets/index.html.1dea7bef.js"><link rel="prefetch" href="/assets/index.html.e6addda8.js"><link rel="prefetch" href="/assets/index.html.2638e7e9.js"><link rel="prefetch" href="/assets/index.html.5db2b8e8.js"><link rel="prefetch" href="/assets/index.html.cbff7fea.js"><link rel="prefetch" href="/assets/index.html.5ac21d40.js"><link rel="prefetch" href="/assets/index.html.c7acfbee.js"><link rel="prefetch" href="/assets/index.html.fb44feb1.js"><link rel="prefetch" href="/assets/index.html.d4e476c9.js"><link rel="prefetch" href="/assets/index.html.ec5764c9.js"><link rel="prefetch" href="/assets/index.html.d185c9f1.js"><link rel="prefetch" href="/assets/index.html.0867f7ab.js"><link rel="prefetch" href="/assets/index.html.2c3899c7.js"><link rel="prefetch" href="/assets/index.html.8a2aee35.js"><link rel="prefetch" href="/assets/index.html.130e4c85.js"><link rel="prefetch" href="/assets/index.html.7277b095.js"><link rel="prefetch" href="/assets/index.html.c074ddbd.js"><link rel="prefetch" href="/assets/index.html.e91a40c5.js"><link rel="prefetch" href="/assets/index.html.0b2b027d.js"><link rel="prefetch" href="/assets/index.html.6b602146.js"><link rel="prefetch" href="/assets/index.html.16d4af72.js"><link rel="prefetch" href="/assets/index.html.b8fc0dcc.js"><link rel="prefetch" href="/assets/index.html.9b3fcbd9.js"><link rel="prefetch" href="/assets/index.html.eeb89bf7.js"><link rel="prefetch" href="/assets/index.html.5114cd1e.js"><link rel="prefetch" href="/assets/index.html.b8354286.js"><link rel="prefetch" href="/assets/index.html.fcd579df.js"><link rel="prefetch" href="/assets/index.html.e743d320.js"><link rel="prefetch" href="/assets/index.html.b34f28e1.js"><link rel="prefetch" href="/assets/index.html.dd5dd927.js"><link rel="prefetch" href="/assets/index.html.7df41339.js"><link rel="prefetch" href="/assets/index.html.9de9b7ae.js"><link rel="prefetch" href="/assets/index.html.db158b25.js"><link rel="prefetch" href="/assets/index.html.fcab0b26.js"><link rel="prefetch" href="/assets/index.html.afada1db.js"><link rel="prefetch" href="/assets/index.html.8681058b.js"><link rel="prefetch" href="/assets/index.html.1c990d16.js"><link rel="prefetch" href="/assets/index.html.9563932e.js"><link rel="prefetch" href="/assets/404.4ba82410.js"><link rel="prefetch" href="/assets/Layout.67323a43.js"><link rel="prefetch" href="/assets/Slide.be972901.js"><link rel="prefetch" href="/assets/Blog.caaad5e4.js"><link rel="prefetch" href="/assets/giscus.es.63137db5.js"><link rel="prefetch" href="/assets/auto.esm.36809f22.js"><link rel="prefetch" href="/assets/index.daae04bf.js"><link rel="prefetch" href="/assets/index.1842ee54.js"><link rel="prefetch" href="/assets/mermaid.esm.min.ee1e0284.js"><link rel="prefetch" href="/assets/highlight.esm.d982e650.js"><link rel="prefetch" href="/assets/markdown.esm.832a189d.js"><link rel="prefetch" href="/assets/math.esm.a3f84b6f.js"><link rel="prefetch" href="/assets/notes.esm.3c361cb7.js"><link rel="prefetch" href="/assets/reveal.esm.b96f05d8.js"><link rel="prefetch" href="/assets/search.esm.80da4a02.js"><link rel="prefetch" href="/assets/zoom.esm.8514a202.js"><link rel="prefetch" href="/assets/photoswipe.esm.092fbc15.js">
  </head>
  <body>
    <div id="app"><!--[--><!--[--><!--[--><span tabindex="-1"></span><a href="#main-content" class="skip-link sr-only">Skip to content</a><!--]--><div class="theme-container has-toc"><!--[--><!--[--><header class="navbar"><div class="navbar-left"><button class="toggle-sidebar-button" title="Toggle Sidebar"><span class="icon"></span></button><!----><a href="/zh/" class="brand"><img class="logo" src="/logo.svg" alt="主题演示"><!----><span class="site-name hide-in-pad">主题演示</span></a><!----></div><div class="navbar-center"><!----><nav class="nav-links"><div class="nav-item hide-in-mobile"><a href="/zh/" class="nav-link" aria-label="博客主页"><span class="icon iconfont icon-home" style=""></span>博客主页<!----></a></div><div class="nav-item hide-in-mobile"><a href="/zh/home.html" class="nav-link" aria-label="项目主页"><span class="icon iconfont icon-home" style=""></span>项目主页<!----></a></div><div class="nav-item hide-in-mobile"><a href="/zh/guide/" class="nav-link" aria-label="使用指南"><span class="icon iconfont icon-creative" style=""></span>使用指南<!----></a></div><div class="nav-item hide-in-mobile"><div class="dropdown-wrapper"><button class="dropdown-title" type="button" aria-label="博文"><span class="title"><span class="icon iconfont icon-edit" style=""></span>博文</span><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><h4 class="dropdown-subtitle"><span>文章 1-4</span></h4><ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/zh/posts/article/article1.html" class="nav-link" aria-label="文章 1"><span class="icon iconfont icon-edit" style=""></span>文章 1<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article2.html" class="nav-link" aria-label="文章 2"><span class="icon iconfont icon-edit" style=""></span>文章 2<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article3.html" class="nav-link" aria-label="文章 3"><span class="icon iconfont icon-edit" style=""></span>文章 3<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article4.html" class="nav-link" aria-label="文章 4"><span class="icon iconfont icon-edit" style=""></span>文章 4<!----></a></li></ul></li><li class="dropdown-item"><h4 class="dropdown-subtitle"><span>文章 5-12</span></h4><ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/zh/posts/article/article5.html" class="nav-link" aria-label="文章 5"><span class="icon iconfont icon-edit" style=""></span>文章 5<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article6.html" class="nav-link" aria-label="文章 6"><span class="icon iconfont icon-edit" style=""></span>文章 6<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article7.html" class="nav-link" aria-label="文章 7"><span class="icon iconfont icon-edit" style=""></span>文章 7<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article8.html" class="nav-link" aria-label="文章 8"><span class="icon iconfont icon-edit" style=""></span>文章 8<!----></a></li></ul></li><li class="dropdown-item"><a href="/zh/posts/article9.html" class="nav-link" aria-label="文章 9"><span class="icon iconfont icon-edit" style=""></span>文章 9<!----></a></li><li class="dropdown-item"><a href="/zh/posts/article10.html" class="nav-link" aria-label="文章 10"><span class="icon iconfont icon-edit" style=""></span>文章 10<!----></a></li><li class="dropdown-item"><a href="/zh/posts/article11.html" class="nav-link" aria-label="文章 11"><span class="icon iconfont icon-edit" style=""></span>文章 11<!----></a></li><li class="dropdown-item"><a href="/zh/posts/article12.html" class="nav-link" aria-label="文章 12"><span class="icon iconfont icon-edit" style=""></span>文章 12<!----></a></li></ul></button></div></div><div class="nav-item hide-in-mobile"><a href="https://vuepress-theme-hope.github.io/v2/zh/" rel="noopener noreferrer" target="_blank" aria-label="主题文档" class="nav-link"><span class="icon iconfont icon-note" style=""></span>主题文档<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></div></nav><!----></div><div class="navbar-right"><!----><div class="nav-item"><div class="dropdown-wrapper i18n-dropdown"><button class="dropdown-title" type="button" aria-label="选择语言"><!--[--><svg xmlns="http://www.w3.org/2000/svg" class="icon i18n-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="i18n icon" style="width:1rem;height:1rem;vertical-align:middle;"><path d="M379.392 460.8 494.08 575.488l-42.496 102.4L307.2 532.48 138.24 701.44l-71.68-72.704L234.496 460.8l-45.056-45.056c-27.136-27.136-51.2-66.56-66.56-108.544h112.64c7.68 14.336 16.896 27.136 26.112 35.84l45.568 46.08 45.056-45.056C382.976 312.32 409.6 247.808 409.6 204.8H0V102.4h256V0h102.4v102.4h256v102.4H512c0 70.144-37.888 161.28-87.04 210.944L378.88 460.8zM576 870.4 512 1024H409.6l256-614.4H768l256 614.4H921.6l-64-153.6H576zM618.496 768h196.608L716.8 532.48 618.496 768z"></path></svg><!--]--><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><a href="/" class="nav-link" aria-label="English"><!---->English<!----></a></li><li class="dropdown-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html" class="router-link-active router-link-exact-active nav-link active" aria-label="简体中文"><!---->简体中文<!----></a></li></ul></button></div></div><div class="nav-item"><a class="repo-link" href="https://gitee.com/changluJava/personal-reading" target="_blank" rel="noopener noreferrer" aria-label="Gitee"><svg xmlns="http://www.w3.org/2000/svg" class="icon gitee-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="gitee icon" style="width:1.25rem;height:1.25rem;vertical-align:middle;"><path d="M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"></path></svg></a></div><div class="nav-item hide-in-mobile"><button id="appearance-switch"><svg xmlns="http://www.w3.org/2000/svg" class="icon auto-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="auto icon" style="display:block;"><path d="M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm0-840c-198.78 0-360 161.22-360 360 0 198.84 161.22 360 360 360s360-161.16 360-360c0-198.78-161.22-360-360-360zm0 660V212c165.72 0 300 134.34 300 300 0 165.72-134.28 300-300 300z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon dark-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="dark icon" style="display:none;"><path d="M524.8 938.667h-4.267a439.893 439.893 0 0 1-313.173-134.4 446.293 446.293 0 0 1-11.093-597.334A432.213 432.213 0 0 1 366.933 90.027a42.667 42.667 0 0 1 45.227 9.386 42.667 42.667 0 0 1 10.24 42.667 358.4 358.4 0 0 0 82.773 375.893 361.387 361.387 0 0 0 376.747 82.774 42.667 42.667 0 0 1 54.187 55.04 433.493 433.493 0 0 1-99.84 154.88 438.613 438.613 0 0 1-311.467 128z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon light-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="light icon" style="display:none;"><path d="M952 552h-80a40 40 0 0 1 0-80h80a40 40 0 0 1 0 80zM801.88 280.08a41 41 0 0 1-57.96-57.96l57.96-58a41.04 41.04 0 0 1 58 58l-58 57.96zM512 752a240 240 0 1 1 0-480 240 240 0 0 1 0 480zm0-560a40 40 0 0 1-40-40V72a40 40 0 0 1 80 0v80a40 40 0 0 1-40 40zm-289.88 88.08-58-57.96a41.04 41.04 0 0 1 58-58l57.96 58a41 41 0 0 1-57.96 57.96zM192 512a40 40 0 0 1-40 40H72a40 40 0 0 1 0-80h80a40 40 0 0 1 40 40zm30.12 231.92a41 41 0 0 1 57.96 57.96l-57.96 58a41.04 41.04 0 0 1-58-58l58-57.96zM512 832a40 40 0 0 1 40 40v80a40 40 0 0 1-80 0v-80a40 40 0 0 1 40-40zm289.88-88.08 58 57.96a41.04 41.04 0 0 1-58 58l-57.96-58a41 41 0 0 1 57.96-57.96z"></path></svg></button></div><!----><!----><button class="toggle-navbar-button" aria-label="Toggle Navbar" aria-expanded="false" aria-controls="nav-screen"><span class="button-container"><span class="button-top"></span><span class="button-middle"></span><span class="button-bottom"></span></span></button></div></header><!----><!--]--><!----><div class="toggle-sidebar-wrapper"><span class="arrow left"></span></div><aside class="sidebar"><!--[--><!----><!--]--><ul class="sidebar-links"><li><!--[--><a href="/zh/" class="nav-link sidebar-link sidebar-page" aria-label="博客主页"><span class="icon iconfont icon-home" style=""></span>博客主页<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/home.html" class="nav-link sidebar-link sidebar-page" aria-label="项目主页"><span class="icon iconfont icon-home" style=""></span>项目主页<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/slide" class="nav-link sidebar-link sidebar-page" aria-label="幻灯片"><!---->幻灯片<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><section class="sidebar-group"><button class="sidebar-heading clickable active"><span class="icon iconfont icon-creative" style=""></span><a href="/zh/interview/" class="title">面试指南</a><span class="arrow down"></span></button><ul class="sidebar-links"><li><!--[--><a href="/zh/interview/Docker.html" class="nav-link sidebar-link sidebar-page" aria-label="Docker"><span class="icon iconfont icon-lock" style=""></span>Docker<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Java%E5%9F%BA%E7%A1%80.html" class="nav-link sidebar-link sidebar-page" aria-label="JAVA"><span class="icon iconfont icon-lock" style=""></span>JAVA<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Java%E5%AE%B9%E5%99%A8.html" class="nav-link sidebar-link sidebar-page" aria-label="Java容器"><span class="icon iconfont icon-lock" style=""></span>Java容器<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/JUC.html" class="nav-link sidebar-link sidebar-page" aria-label="JUC"><span class="icon iconfont icon-lock" style=""></span>JUC<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/JVM.html" class="nav-link sidebar-link sidebar-page" aria-label="JVM"><span class="icon iconfont icon-lock" style=""></span>JVM<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Linux.html" class="nav-link sidebar-link sidebar-page" aria-label="Linux"><span class="icon iconfont icon-lock" style=""></span>Linux<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/MySQL.html" class="nav-link sidebar-link sidebar-page" aria-label="MySQL"><span class="icon iconfont icon-lock" style=""></span>MySQL<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/NIO%E4%B8%8ENetty.html" class="nav-link sidebar-link sidebar-page" aria-label="Netty"><span class="icon iconfont icon-lock" style=""></span>Netty<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Redis.html" class="nav-link sidebar-link sidebar-page" aria-label="Redis"><span class="icon iconfont icon-lock" style=""></span>Redis<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6.html" class="nav-link sidebar-link sidebar-page" aria-label="主流框架"><span class="icon iconfont icon-lock" style=""></span>主流框架<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%8E%E9%AB%98%E6%80%A7%E8%83%BD%E9%AB%98%E5%8F%AF%E7%94%A8.html" class="nav-link sidebar-link sidebar-page" aria-label="分布式"><span class="icon iconfont icon-lock" style=""></span>分布式<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html" class="nav-link sidebar-link sidebar-page" aria-label="操作系统"><span class="icon iconfont icon-lock" style=""></span>操作系统<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E6%99%BA%E5%8A%9B%E9%A2%98.html" class="nav-link sidebar-link sidebar-page" aria-label="智力题"><span class="icon iconfont icon-lock" style=""></span>智力题<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1.html" class="nav-link sidebar-link sidebar-page" aria-label="系统设计"><span class="icon iconfont icon-lock" style=""></span>系统设计<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html" class="router-link-active router-link-exact-active nav-link active sidebar-link sidebar-page active" aria-label="计算机网络"><span class="icon iconfont icon-lock" style=""></span>计算机网络<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_1、计算机网络分层" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、计算机网络分层"><!---->1、计算机网络分层<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#osi和tcp-ip网络层模型" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="OSI和TCP/IP网络层模型"><!---->OSI和TCP/IP网络层模型<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#为什么网络要分层" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="为什么网络要分层？"><!---->为什么网络要分层？<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_2、应用层协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、应用层协议"><!---->2、应用层协议<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_1、dns" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、DNS"><!---->1、DNS<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_2、http" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、HTTP"><!---->2、HTTP<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_3、https" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="3、HTTPS"><!---->3、HTTPS<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_4、smtp协议-发送邮件协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="4、SMTP协议（发送邮件协议）"><!---->4、SMTP协议（发送邮件协议）<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_5、pop3-imap-邮件接收的协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="5、POP3/IMAP（邮件接收的协议）"><!---->5、POP3/IMAP（邮件接收的协议）<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_6、ftp-文件传输协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="6、FTP（文件传输协议）"><!---->6、FTP（文件传输协议）<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_7、telnet-远程登录协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="7、Telnet（远程登录协议）"><!---->7、Telnet（远程登录协议）<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_3、传输层协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="3、传输层协议"><!---->3、传输层协议<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_1、tcp" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、TCP"><!---->1、TCP<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_2、quic协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、QUIC协议"><!---->2、QUIC协议<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_4、网路层协议" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="4、网路层协议"><!---->4、网路层协议<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_4-1、ip头部结构" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="4.1、IP头部结构"><!---->4.1、IP头部结构<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_5、cdn原理" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="5、CDN原理"><!---->5、CDN原理<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_6、ping和traceroute" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="6、ping和traceroute"><!---->6、ping和traceroute<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_7、服务器端口关闭了-客户端这时候发送报文-会发生什么" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="7、服务器端口关闭了，客户端这时候发送报文，会发生什么？"><!---->7、服务器端口关闭了，客户端这时候发送报文，会发生什么？<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_8、服务器如何感知客户端掉线" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="8、服务器如何感知客户端掉线？"><!---->8、服务器如何感知客户端掉线？<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_9、有哪些网络攻击方式-该怎么防范" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="9、有哪些网络攻击方式，该怎么防范?"><!---->9、有哪些网络攻击方式，该怎么防范?<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_10、在浏览器中输入-url-地址-显示主页的过程" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="10、在浏览器中输入 url 地址 -&gt;&gt; 显示主页的过程"><!---->10、在浏览器中输入 url 地址 -&gt;&gt; 显示主页的过程<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_11、cookie-的作用是什么-和-session-有什么区别" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="11、Cookie 的作用是什么? 和 Session 有什么区别？"><!---->11、Cookie 的作用是什么? 和 Session 有什么区别？<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_12、uri-和-url-的区别是什么" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="12、URI 和 URL 的区别是什么?"><!---->12、URI 和 URL 的区别是什么?<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.html" class="nav-link sidebar-link sidebar-page" aria-label="设计模式"><!---->设计模式<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li></ul></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading clickable"><span class="icon iconfont icon-creative" style=""></span><a href="/zh/guide/" class="title">如何使用</a><!----></p><ul class="sidebar-links"><li><!--[--><a href="/zh/guide/page.html" class="nav-link sidebar-link sidebar-page" aria-label="页面配置"><span class="icon iconfont icon-page" style=""></span>页面配置<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/guide/markdown.html" class="nav-link sidebar-link sidebar-page" aria-label="Markdown 展示"><span class="icon iconfont icon-markdown" style=""></span>Markdown 展示<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/guide/disable.html" class="nav-link sidebar-link sidebar-page" aria-label="布局与功能禁用"><span class="icon iconfont icon-config" style=""></span>布局与功能禁用<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/guide/encrypt.html" class="nav-link sidebar-link sidebar-page" aria-label="密码加密的文章"><span class="icon iconfont icon-lock" style=""></span>密码加密的文章<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li></ul></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading"><span class="icon iconfont icon-note" style=""></span><span class="title">文章</span><!----></p><ul class="sidebar-links"><li><!--[--><section class="sidebar-group"><button class="sidebar-heading clickable"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 1-4</span><span class="arrow right"></span></button><!----></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 5-12</span><!----></p><ul class="sidebar-links"><li><!--[--><section class="sidebar-group"><button class="sidebar-heading clickable"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 5-8</span><span class="arrow right"></span></button><!----></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 9-12</span><!----></p><ul class="sidebar-links"><li><!--[--><a href="/zh/posts/article9.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 9"><span class="icon iconfont icon-edit" style=""></span>文章 9<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/posts/article10.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 10"><span class="icon iconfont icon-edit" style=""></span>文章 10<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/posts/article11.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 11"><span class="icon iconfont icon-edit" style=""></span>文章 11<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/posts/article12.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 12"><span class="icon iconfont icon-edit" style=""></span>文章 12<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li></ul></section><!--]--></li></ul></section><!--]--></li></ul></section><!--]--></li></ul><!--[--><!----><!--]--></aside><!--[--><main class="page" id="main-content"><!--[--><!----><nav class="breadcrumb disable"></nav><div class="page-title"><h1><span class="icon iconfont icon-lock" style=""></span>计算机网络</h1><div class="page-info"><span class="author-info" aria-label="作者🖊" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon author-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="author icon"><path d="M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z"></path></svg><span><a class="author-item" href="https://changlu.blog.csdn.net" target="_blank" rel="noopener noreferrer">长路</a></span><span property="author" content="长路"></span></span><!----><!----><span class="category-info" aria-label="分类🌈" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon category-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="category icon"><path d="M148.41 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H148.41c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.311-40.31zM147.556 553.478H429.73c22.263 0 40.311 18.048 40.311 40.31v282.176c0 22.263-18.048 40.312-40.31 40.312H147.555c-22.263 0-40.311-18.049-40.311-40.312V593.79c0-22.263 18.048-40.311 40.31-40.311zM593.927 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H593.927c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.31-40.31zM730.22 920.502H623.926c-40.925 0-74.22-33.388-74.22-74.425V623.992c0-41.038 33.387-74.424 74.425-74.424h222.085c41.038 0 74.424 33.226 74.424 74.067v114.233c0 10.244-8.304 18.548-18.547 18.548s-18.548-8.304-18.548-18.548V623.635c0-20.388-16.746-36.974-37.33-36.974H624.13c-20.585 0-37.331 16.747-37.331 37.33v222.086c0 20.585 16.654 37.331 37.126 37.331H730.22c10.243 0 18.547 8.304 18.547 18.547 0 10.244-8.304 18.547-18.547 18.547z"></path></svg><ul class="categories-wrapper"><li class="category category8 clickable" role="navigation">面试题</li><meta property="articleSection" content="面试题"></ul></span><span aria-label="标签🏷" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon tag-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="tag icon"><path d="M939.902 458.563L910.17 144.567c-1.507-16.272-14.465-29.13-30.737-30.737L565.438 84.098h-.402c-3.215 0-5.726 1.005-7.634 2.913l-470.39 470.39a10.004 10.004 0 000 14.164l365.423 365.424c1.909 1.908 4.42 2.913 7.132 2.913s5.223-1.005 7.132-2.913l470.39-470.39c2.01-2.11 3.014-5.023 2.813-8.036zm-240.067-72.121c-35.458 0-64.286-28.828-64.286-64.286s28.828-64.285 64.286-64.285 64.286 28.828 64.286 64.285-28.829 64.286-64.286 64.286z"></path></svg><ul class="tags-wrapper"><li class="tag tag2 clickable" role="navigation">计算机网络</li></ul><meta property="keywords" content="计算机网络"></span><span class="reading-time-info" aria-label="阅读时间⌛" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon timer-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="timer icon"><path d="M799.387 122.15c4.402-2.978 7.38-7.897 7.38-13.463v-1.165c0-8.933-7.38-16.312-16.312-16.312H256.33c-8.933 0-16.311 7.38-16.311 16.312v1.165c0 5.825 2.977 10.874 7.637 13.592 4.143 194.44 97.22 354.963 220.201 392.763-122.204 37.542-214.893 196.511-220.2 389.397-4.661 5.049-7.638 11.651-7.638 19.03v5.825h566.49v-5.825c0-7.379-2.849-13.981-7.509-18.9-5.049-193.016-97.867-351.985-220.2-389.527 123.24-37.67 216.446-198.453 220.588-392.892zM531.16 450.445v352.632c117.674 1.553 211.787 40.778 211.787 88.676H304.097c0-48.286 95.149-87.382 213.728-88.676V450.445c-93.077-3.107-167.901-81.297-167.901-177.093 0-8.803 6.99-15.793 15.793-15.793 8.803 0 15.794 6.99 15.794 15.793 0 80.261 63.69 145.635 142.01 145.635s142.011-65.374 142.011-145.635c0-8.803 6.99-15.793 15.794-15.793s15.793 6.99 15.793 15.793c0 95.019-73.789 172.82-165.96 177.093z"></path></svg><span>大约 43 分钟</span><meta property="timeRequired" content="PT43M"></span></div><hr></div><div class="toc-place-holder"><aside id="toc"><div class="toc-header">此页内容</div><div class="toc-wrapper"><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_1、计算机网络分层" class="router-link-active router-link-exact-active toc-link level2">1、计算机网络分层</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#osi和tcp-ip网络层模型" class="router-link-active router-link-exact-active toc-link level3">OSI和TCP/IP网络层模型</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#为什么网络要分层" class="router-link-active router-link-exact-active toc-link level3">为什么网络要分层？</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_2、应用层协议" class="router-link-active router-link-exact-active toc-link level2">2、应用层协议</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_1、dns" class="router-link-active router-link-exact-active toc-link level3">1、DNS</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_2、http" class="router-link-active router-link-exact-active toc-link level3">2、HTTP</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_3、https" class="router-link-active router-link-exact-active toc-link level3">3、HTTPS</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_4、smtp协议-发送邮件协议" class="router-link-active router-link-exact-active toc-link level3">4、SMTP协议（发送邮件协议）</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_5、pop3-imap-邮件接收的协议" class="router-link-active router-link-exact-active toc-link level3">5、POP3/IMAP（邮件接收的协议）</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_6、ftp-文件传输协议" class="router-link-active router-link-exact-active toc-link level3">6、FTP（文件传输协议）</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_7、telnet-远程登录协议" class="router-link-active router-link-exact-active toc-link level3">7、Telnet（远程登录协议）</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_3、传输层协议" class="router-link-active router-link-exact-active toc-link level2">3、传输层协议</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_1、tcp" class="router-link-active router-link-exact-active toc-link level3">1、TCP</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_2、quic协议" class="router-link-active router-link-exact-active toc-link level3">2、QUIC协议</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_4、网路层协议" class="router-link-active router-link-exact-active toc-link level2">4、网路层协议</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_4-1、ip头部结构" class="router-link-active router-link-exact-active toc-link level3">4.1、IP头部结构</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_5、cdn原理" class="router-link-active router-link-exact-active toc-link level2">5、CDN原理</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_6、ping和traceroute" class="router-link-active router-link-exact-active toc-link level2">6、ping和traceroute</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_7、服务器端口关闭了-客户端这时候发送报文-会发生什么" class="router-link-active router-link-exact-active toc-link level2">7、服务器端口关闭了，客户端这时候发送报文，会发生什么？</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_8、服务器如何感知客户端掉线" class="router-link-active router-link-exact-active toc-link level2">8、服务器如何感知客户端掉线？</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_9、有哪些网络攻击方式-该怎么防范" class="router-link-active router-link-exact-active toc-link level2">9、有哪些网络攻击方式，该怎么防范?</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_10、在浏览器中输入-url-地址-显示主页的过程" class="router-link-active router-link-exact-active toc-link level2">10、在浏览器中输入 url 地址 -&gt;&gt; 显示主页的过程</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_11、cookie-的作用是什么-和-session-有什么区别" class="router-link-active router-link-exact-active toc-link level2">11、Cookie 的作用是什么? 和 Session 有什么区别？</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html#_12、uri-和-url-的区别是什么" class="router-link-active router-link-exact-active toc-link level3">12、URI 和 URL 的区别是什么?</a></li><!----><!--]--></ul><!--]--></ul></div></aside></div><!----><div class="theme-hope-content"><h1 id="计算机网络" tabindex="-1"><a class="header-anchor" href="#计算机网络" aria-hidden="true">#</a> 计算机网络</h1><h2 id="_1、计算机网络分层" tabindex="-1"><a class="header-anchor" href="#_1、计算机网络分层" aria-hidden="true">#</a> 1、计算机网络分层</h2><h3 id="osi和tcp-ip网络层模型" tabindex="-1"><a class="header-anchor" href="#osi和tcp-ip网络层模型" aria-hidden="true">#</a> OSI和TCP/IP网络层模型</h3><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206141602349.png" alt="image-20220614160207266" loading="lazy"></p><p>OSI 七层模型这么厉害，为什么干不过 TCP/IP 四 层模型呢？</p><ul><li>OSI分层的话太过于细致，总共有七层，一些常见原因如：①缺乏实际经验。②OSI协议实现起来复杂。③指定标准期间太长。④功能在多个层次中重复出现。</li></ul><blockquote><p>TCP/IP四层模型</p></blockquote><p>1、应用层（报文）：应用层位于传输层之上，主要提供两个终端设备上的应用程序之间信息交换的服务，它定义了信息交换的格式，消息会交给下一层传输层来传输。 我们把应用层交互的数据单元称为报文。</p><p>2、传输层（包）：传输层的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务。</p><ul><li>包含TCP、UDP。</li></ul><p>3、网络层（IP 数据报）：网络层负责为分组交换网上的不同主机提供通信服务。</p><p>4、网络接口层（帧）：数据链路层的作用是将网络层交下来的 IP 数据报组装成帧，在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息（如同步信息，地址信息，差错控制等）</p><h3 id="为什么网络要分层" tabindex="-1"><a class="header-anchor" href="#为什么网络要分层" aria-hidden="true">#</a> 为什么网络要分层？</h3><p>①各层相互独立。②提高整体灵活性。③大问题化小（解耦）。</p><ul><li>计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决，计算机整个体系从上到下都是按照严格的层次结构设计的。</li></ul><h2 id="_2、应用层协议" tabindex="-1"><a class="header-anchor" href="#_2、应用层协议" aria-hidden="true">#</a> 2、应用层协议</h2><h3 id="_1、dns" tabindex="-1"><a class="header-anchor" href="#_1、dns" aria-hidden="true">#</a> 1、DNS</h3><h4 id="_1-1、dns域名解析" tabindex="-1"><a class="header-anchor" href="#_1-1、dns域名解析" aria-hidden="true">#</a> 1.1、DNS域名解析</h4><p>DNS占用53号端口，同时使用<code>TCP</code>与<code>UDP</code>。</p><p>在进行区域传输的时候，一般使用TCP；进行域名解析查询使用UDP协议。</p><p>区域传输：<strong>一般是辅域名服务器(大约3小时)向主域名服务器来进行查询了解数据是否有更新变化，若是有会进行区域传输，也就是进行同步操作</strong>。</p><p>使用TCP传输的原因？因为同步的数据量较大一般，比一个请求应答的数据量要多得多，此时采用<strong>TCP的话能够保障数据的可靠连接以及准确性</strong>。</p><p>域名解析：一般域名解析返回的内容不会超过512字节，使用UDP传输不需要进行三次握手，这样的话DNS服务器<strong>负载会更低一些，响应更快</strong>。其实<strong>客户端也可以指定DNS查询使用TCP，不过现实中一般都使用UDP</strong>。</p><h4 id="_1-2、dns劫持" tabindex="-1"><a class="header-anchor" href="#_1-2、dns劫持" aria-hidden="true">#</a> 1.2、DNS劫持</h4><blockquote><p><a href="https://baijiahao.baidu.com/s?id=1711582469702037668&amp;wfr=spider&amp;for=pc" target="_blank" rel="noopener noreferrer">什么是DNS劫持？如何应对DNS劫持？<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p><a href="https://zhuanlan.zhihu.com/p/377974683" target="_blank" rel="noopener noreferrer">DNS是什么？dns劫持是怎么回事？怎么处理？<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>DNS劫持：指的是网络攻击的一个手段，也被称为域名劫持或者是DNS重定向。通过攻击域名解析服务器（DNS）或伪造域名解析服务器的方法，<strong>篡改目标网站的解析结果</strong>，<strong>将目标网站的域名解析到错误的地址，导致访问该网站的用户被劫持到被指定的网址，从而实现非法窃取用户信息或破坏正常网络服务的目的。</strong></p><p>劫持方式：①攻击权威域名服务器，修改区域文件内的资源记录。②攻击域名注册商或域名站点取得域名账户的控制权限，直接修改域名解析记录，见域名指向指定的IP地址。</p><p>预防方式：①对域名账号进行定期检查，定期对密码进行更换。②域名账户信息、域名whois信息、域名解析状态，每天site网站检查是否存在非个人设定网页，发现异常及时联系域名服务商。③锁定域名解析状态，不允许通过DNS服务商网站修改记录，使用此方法后，需要做域名解析都要通过服务商来完成，这样可以从根本上杜绝通过攻击服务商修改解析记录的方法。</p><h3 id="_2、http" tabindex="-1"><a class="header-anchor" href="#_2、http" aria-hidden="true">#</a> 2、HTTP</h3><h4 id="_2-1、http介绍" tabindex="-1"><a class="header-anchor" href="#_2-1、http介绍" aria-hidden="true">#</a> 2.1、HTTP介绍</h4><p>HTTP 协议就是用来规范<strong>超文本</strong>的传输，是一个<strong>无状态</strong>（stateless）协议，也就是说服务器不维护任何有关客户端过去所发请求的消息。</p><p><strong>与有状态协议的区别</strong>：有状态协议会更加复杂，需要维护状态（历史信息），而且如果客户或服务器失效，会产生状态的不一致，解决这种不一致的代价更高。</p><h4 id="_2-2、http-协议通信过程" tabindex="-1"><a class="header-anchor" href="#_2-2、http-协议通信过程" aria-hidden="true">#</a> 2.2、HTTP 协议通信过程</h4><p>HTTP 是应用层协议，它以 **TCP（传输层）**作为底层协议，<strong>默认端口为 80</strong>. 通信过程主要如下：</p><ol><li>服务器在 80 端口等待客户的请求。</li><li>浏览器发起到服务器的 TCP 连接（创建套接字 Socket）。</li><li>服务器接收来自浏览器的 TCP 连接。</li><li>浏览器（HTTP 客户端）与 Web 服务器（HTTP 服务器）交换 HTTP 消息。</li><li>关闭 TCP 连接。</li></ol><h4 id="_2-3、http报文结构与状态码" tabindex="-1"><a class="header-anchor" href="#_2-3、http报文结构与状态码" aria-hidden="true">#</a> 2.3、HTTP报文结构与状态码</h4><blockquote><p><a href="https://www.jianshu.com/p/3eb1878a06e6?from=timeline" target="_blank" rel="noopener noreferrer">永久重定向 Vs 临时重定向<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p><strong>请求报文格式</strong>、请求URI、协议版本、请求头以及请求体</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204221736235.png" alt="image-20220422173601112" loading="lazy"></p><p><strong>响应报文格式</strong>：</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204221738252.png" alt="image-20220422173815155" loading="lazy"></p><p><strong>状态码</strong>：200(请求成功)、301(永久性重定向)、302(临时重定向)、401(未认证)、403(无权限)、404(资源不存在)、500(服务器错误)、503(服务器当前不能处理请求)</p><ul><li>对于永久、临时重定向都会进行跳转页面，区别有：①永久：新网址完全继承旧网址，旧网址的排名等完全清零。②临时：对旧网址没有影响，但新网址不会有排名。</li></ul><p>额外：304(未修改状态代码，自上次访问以来，请求的资源未被修改)、502(网关错误，代理错误)</p><h4 id="_2-4、http1-1、2-0的新特性" tabindex="-1"><a class="header-anchor" href="#_2-4、http1-1、2-0的新特性" aria-hidden="true">#</a> 2.4、HTTP1.1、2.0的新特性</h4><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206141635274.png" alt="image-20220614163548197" loading="lazy"></p><p><a href="https://blog.csdn.net/ailunlee/article/details/97831912" target="_blank" rel="noopener noreferrer">HTTP1.0和HTTP1.1和HTTP2.0的区别<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><blockquote><p>HTTP1.1</p></blockquote><p>1、<strong>长连接</strong>：HTTP1.1支持长连接和请求的流水线处理，在一个TCP连接上可以传送多个HTTP请求和响应，减少了建立和关闭连接的消耗和延迟，在HTTP1.1中默认开启长连接keep-alive，一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。HTTP1.0需要使用keep-alive参数来告知服务器端要建立一个长连接。</p><p>2、<strong>支持多个TCP连接</strong>。</p><p>3、<strong>新增状态码100</strong>，客户端可以继续发送请求或者忽略这个请求。</p><p>4、支持<strong>分块传输编码</strong>，可将数据分割成多块，让浏览器逐步显示页面。</p><p>5、新增缓存指令max-age，有效期指定cookie的持久性问题。</p><p>6、加入Host头处理：服务端能够确认客户端想要请求的真正网址。</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206141914038.png" alt="image-20220614191400995" loading="lazy"></p><blockquote><p>HTTP2.0</p></blockquote><p>1、使用<strong>多路复用</strong>：同一个连接并发处理多个请求，而且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1也可以多建立几个TCP连接，来支持处理更多并发的请求，但是创建TCP连接本身也是有开销的。</p><p>2、<strong>头部数据压缩</strong>： HTTP1.1不支持header数据的压缩，HTTP2.0使用HPACK算法对header的数据进行压缩，这样数据体积小了，在网络上传输就会更快。</p><ul><li>随着Web功能越来越复杂，每个页面产生的请求数也越来越多，导致消耗在头部的流量越来越多，尤其是每次都要传输UserAgent、Cookie这类不会频繁变动的内容，完全是一种浪费。</li></ul><p>3、服务器推送：HTTP2.0引入了server push，它允许服务端推送资源给浏览器，在浏览器明确地请求之前，免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源，不用再通过网络。</p><p>4、<strong>二进制协议</strong>。</p><blockquote><p>HTTP3.0</p><p><a href="https://www.jianshu.com/p/e655c6569796" target="_blank" rel="noopener noreferrer">http1.0、http1.1、http2.0、http3.0区别<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>可以进行<strong>并行处理，改善了多路复用</strong>，（一个连接上的多个stream之间没有依赖，丢包的话只需要重发丢掉的包就系行了）</p><h3 id="_3、https" tabindex="-1"><a class="header-anchor" href="#_3、https" aria-hidden="true">#</a> 3、HTTPS</h3><p>默认是443端口。</p><h4 id="_3-1、https-的核心—ssl-tls协议" tabindex="-1"><a class="header-anchor" href="#_3-1、https-的核心—ssl-tls协议" aria-hidden="true">#</a> 3.1、HTTPS 的核心—SSL/TLS协议</h4><p>HTTPS 之所以能达到较高的安全性要求，就是结合了 SSL/TLS 和 TCP 协议，对通信数据进行加密，解决了 HTTP 数据透明的问题。</p><blockquote><p>SSL 和 TLS 的区别？</p></blockquote><p>SSL 指安全套接字协议（Secure Sockets Layer），首次发布与 1996 年。SSL 的首次发布其实已经是他的 3.0 版本，SSL 1.0 从未面世，SSL 2.0 则具有较大的缺陷（DROWN 缺陷——Decrypting RSA with Obsolete and Weakened eNcryption）。很快，在 1999 年，SSL 3.0 进一步升级，<strong>新版本被命名为 TLS 1.0</strong>。因此，TLS 是基于 SSL 之上的，但由于习惯叫法，通常把 HTTPS 中的核心加密协议混成为 SSL/TLS。</p><p><strong>简述</strong>：SSL3.0升级之后就叫做TLS。</p><h4 id="_3-2、https的一个传输过程" tabindex="-1"><a class="header-anchor" href="#_3-2、https的一个传输过程" aria-hidden="true">#</a> 3.2、Https的一个传输过程</h4><blockquote><p>来自极客时间专栏—119Java业务开发场景错误/04安全篇/30丨如何正确保存和传输敏感数据？</p></blockquote><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202206051018973.png" alt="image-20220605101824850" loading="lazy"></p><p>作为准备工作，网站管理员需要申请并安装 CA 证书到服务端。CA 证书中包含非对称加密的公钥、网站域名等信息，密钥是服务端自己保存的，不会在任何地方公开。</p><p>建立 HTTPS 连接的过程，首先是 TCP 握手，然后是 TLS 握手的一系列工作，包括：</p><ol><li>客户端告知服务端自己支持的密码套件（比如TLS_RSA_WITH_AES_256_GCM_SHA384，其中 RSA 是密钥交换的方式，</li></ol><p>AES_256_GCM 是加密算法，SHA384 是消息验证摘要算法），提供客户端随机数。</p><ol start="2"><li><p>服务端应答选择的密码套件，提供服务端随机数。</p></li><li><p>服务端发送 CA 证书给客户端，客户端验证 CA 证书（后面详细说明）。</p></li><li><p>客户端生成 PreMasterKey，并使用非对称加密 + 公钥加密 PreMasterKey。</p></li><li><p>客户端把加密后的 PreMasterKey 传给服务端。</p></li><li><p>服务端使用非对称加密 + 私钥解密得到 PreMasterKey，并使用 PreMasterKey+ 两个随机数，生成 MasterKey。</p></li><li><p>客户端也使用 PreMasterKey+ 两个随机数生成 MasterKey。</p></li><li><p>客户端告知服务端之后将进行加密传输。</p></li><li><p>客户端使用 MasterKey 配合对称加密算法，进行对称加密测试。</p></li><li><p>服务端也使用 MasterKey 配合对称加密算法，进行对称加密测试。</p></li></ol><p>接下来，客户端和服务端的所有通信都是加密通信，并且数据通过签名确保无法篡改。你可</p><p>能会问，客户端怎么验证 CA 证书呢？</p><p>其实，CA 证书是一个证书链，你可以看一下上图的左边部分：</p><p>从服务端拿到的 CA 证书是用户证书，我们需要通过证书中的签发人信息找到上级中间证书，再网上找到根证书。</p><p>根证书只有为数不多的权威机构才能生成，一般预置在 OS 中，根本无法伪造。</p><p>找到根证书后，提取其公钥来验证中间证书的签名，判断其权威性。</p><p>最后再拿到中间证书的公钥，验证用户证书的签名。这，就验证了用户证书的合法性，然后再校验其有效期、域名等信息进一步验证有效性。</p><p>总结一下，TLS 通过巧妙的流程和算法搭配解决了传输安全问题：<strong>使用对称加密加密数据</strong>，</p><p>使用非对称加密算法确保密钥无法被中间人解密；使用 CA 证书链认证，确保中间人无法伪造自己的证书和公钥。</p><p>如果网站涉及敏感数据的传输，必须使用 HTTPS 协议。作为用户，如果你看到网站不是</p><p>HTTPS 的或者看到无效证书警告，也不应该继续使用这个网站，以免敏感信息被泄露。</p><h4 id="_3-3、http与https的区别" tabindex="-1"><a class="header-anchor" href="#_3-3、http与https的区别" aria-hidden="true">#</a> 3.3、HTTP与HTTPS的区别</h4><blockquote><p><a href="https://blog.csdn.net/qq_35642036/article/details/82788421" target="_blank" rel="noopener noreferrer">HTTP与HTTPS的区别，详细介绍<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>HTTPS协议的主要作用可以分为两种：一种是建立一个信息安全通道，来保证数据传输的安全；另一种就是确认网站的真实性。</p><h4 id="_3-4、什么是数字签名-ca机构的作用-数字证书里有什么" tabindex="-1"><a class="header-anchor" href="#_3-4、什么是数字签名-ca机构的作用-数字证书里有什么" aria-hidden="true">#</a> 3.4、什么是数字签名？CA机构的作用，数字证书里有什么？</h4><blockquote><p><a href="https://blog.csdn.net/qq_23901487/article/details/72730330" target="_blank" rel="noopener noreferrer">数字证书包含哪些内容<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>数字签名（又称公钥数字签名）是只有信息的发送者才能产生的别人无法伪造的一段数字串，这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。</p><p>CA中心又称CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。</p><p>数字证书中包含：</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>①版本号—标识证书的版本（V1 V2 V3）
②序列号—证书的唯一标识符。
③签名 —签名算法标识符
④颁发者—证书颁发者的可识别名
⑥主体 —证书拥有者的可识别名
⑧颁发者唯一标识符—证书颁发者的唯一标识符 V2 V3
⑨主体唯 一标识符—证书拥有者的唯一标识符 V2 V3
⑩扩展 —可选的标准和专用的扩展 V2 V3
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_3-5、ca信任链" tabindex="-1"><a class="header-anchor" href="#_3-5、ca信任链" aria-hidden="true">#</a> 3.5、CA信任链</h4><blockquote><p>[<a href="https://www.cnblogs.com/aaronLinux/p/10552084.html" target="_blank" rel="noopener noreferrer">加密]证书、CA、证书信任链 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>这个问题实际上是对于客户端浏览器是如何来验证服务端的证书是可信任的。</p><p>在向CA 申请证书时是需要 <strong>CA的私钥</strong> 去对整个证书的签名摘要做非对称加密的，也就是证书是可以通过 <strong>CA的公钥</strong> 去解密得到<strong>证书的签名摘要</strong>的。 当我们再次用 <strong>相同的摘要算法</strong>（证书里面有保存所使用的算法）对整个证书做签名，如果得到的签名和证书上的签名是一致的，说明这个证书是可信任的。</p><p>同理，中介证书 也是可以被这样的方式证明其可信任。这样的一整个流程称为 <strong>信任链</strong>（Chain of trust）。</p><p>就是我<strong>绝对</strong>相信你（A&gt;B）；你<strong>绝对</strong>相信他（B&gt;C）；等于我<strong>绝对</strong>相信他（A&gt;C）。</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204221949040.png" alt="image-20220422194938935" loading="lazy"></p><ol><li>客户端得到服务端返回的证书，通过读取得到 <strong>服务端证书的发布机构（Issuer）</strong></li><li>客户端去操作系统查找这个发布机构的的证书，如果是不是根证书就继续递归下去 <strong>直到拿到根证书</strong>。</li><li>用 <strong>根证书的公钥</strong> 去 <strong>解密验证</strong> 上一层证书的<strong>合法性</strong>，再拿上一层证书的公钥去验证更上层证书的合法性；递归回溯。</li><li>最后验证服务器端的证书是 <strong>可信任</strong> 的。</li></ol><hr><h3 id="_4、smtp协议-发送邮件协议" tabindex="-1"><a class="header-anchor" href="#_4、smtp协议-发送邮件协议" aria-hidden="true">#</a> 4、SMTP协议（发送邮件协议）</h3><p>简单邮件传输(发送)协议（SMTP，Simple Mail Transfer Protocol） ：基于 TCP 协议，用来发送电子邮件。</p><h4 id="_4-1、电子邮件的发送过程" tabindex="-1"><a class="header-anchor" href="#_4-1、电子邮件的发送过程" aria-hidden="true">#</a> 4.1、电子邮件的发送过程</h4><p>比如我的邮箱是“dabai@cszhinan.com”，我要向“xiaoma@qq.com”发送邮件，整个过程可以简单分为下面几步：</p><ol><li><p>通过 <strong>SMTP</strong> 协议，我将我写好的邮件交给163邮箱服务器（邮局）。</p></li><li><p>163邮箱服务器发现我发送的邮箱是qq邮箱，然后它使用 SMTP协议将我的邮件转发到 qq邮箱服务器。</p></li><li><p>qq邮箱服务器接收邮件之后就通知邮箱为“xiaoma@qq.com”的用户来收邮件，然后用户就通过 <strong>POP3/IMAP</strong> 协议将邮件取出。</p><p>上面是不同邮件服务器发送的过程，相同邮件服务器发送少了对应的转发过程而已，其他都是一致的。</p></li></ol><h4 id="_4-2、何判断邮箱是真正存在的" tabindex="-1"><a class="header-anchor" href="#_4-2、何判断邮箱是真正存在的" aria-hidden="true">#</a> 4.2、何判断邮箱是真正存在的？</h4><p>下面我们需要判断我们要发送的邮箱地址是否真的存在，这个时候我们可以利用 SMTP 协议来检测：</p><ol><li>查找邮箱域名对应的 SMTP 服务器地址</li><li>尝试与服务器建立连接</li><li>连接成功后尝试向需要验证的邮箱发送邮件</li><li>根据返回结果判定邮箱地址的真实性</li></ol><p>其实就是模拟发送邮件的一个过程而已，若是返回结果无误那么就说明邮箱地址存在。</p><h3 id="_5、pop3-imap-邮件接收的协议" tabindex="-1"><a class="header-anchor" href="#_5、pop3-imap-邮件接收的协议" aria-hidden="true">#</a> 5、POP3/IMAP（邮件接收的协议）</h3><p>POP3 和 IMAP 两者都是负责邮件接收的协议。</p><p>IMAP 协议相比于POP3更新一点，为用户提供的可选功能也更多一点,几乎所有现代电子邮件客户端和服务器都支持IMAP。大部分网络邮件服务提供商都支持POP3和IMAP。</p><h3 id="_6、ftp-文件传输协议" tabindex="-1"><a class="header-anchor" href="#_6、ftp-文件传输协议" aria-hidden="true">#</a> 6、FTP（文件传输协议）</h3><p>简述：主要提供文件传输服务，<strong>基于 TCP 实现可靠的传输</strong>。使用 FTP 传输文件的好处是可以屏蔽操作系统和文件存储方式。</p><p>客户—服务器（C/S）模型</p><p>FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了<strong>两条 TCP 连接</strong>（其它客户服务器应用程序一般只有一条 TCP 连接）：</p><ol><li>控制连接：用于传送控制信息（命令和响应）</li><li>数据连接：用于数据传送；</li></ol><p>这种将命令和数据分开传送的思想大大提高了 FTP 的效率。</p><h3 id="_7、telnet-远程登录协议" tabindex="-1"><a class="header-anchor" href="#_7、telnet-远程登录协议" aria-hidden="true">#</a> 7、Telnet（远程登录协议）</h3><p><strong>SSH（ Secure Shell）</strong> 是目前较可靠，专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH 建立在<strong>可靠的传输协议 TCP</strong> 之上。</p><p>Telnet 和 SSH 之间的主要区别在于 <strong>SSH 协议会对传输的数据进行加密保证数据安全性</strong>。</p><h2 id="_3、传输层协议" tabindex="-1"><a class="header-anchor" href="#_3、传输层协议" aria-hidden="true">#</a> 3、传输层协议</h2><h3 id="_1、tcp" tabindex="-1"><a class="header-anchor" href="#_1、tcp" aria-hidden="true">#</a> 1、TCP</h3><h4 id="_1-0、tcp的头部结构" tabindex="-1"><a class="header-anchor" href="#_1-0、tcp的头部结构" aria-hidden="true">#</a> 1.0、TCP的头部结构</h4><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206141745979.png" alt="image-20220614174502837" loading="lazy"></p><p>16位源端口号、16目的端口号、32位序列号、32位确认号、4位头部长度、6个校验码、16位窗口大小、16位校验和、16位紧急指针、TCP头部选项</p><p>32位序列号：其能够表示传输的字节流位数，初始是一个随机的ISN值，之后会根据每次发送的数据来进行下相加。</p><p>32位确认号：用于进行响应，其值位对方发送过来序号值+1。</p><p>4位头部长度，表示有2的四次方个32位，又4的最大值为15，32位就是4字节，那么最大就是60个字节。</p><p>6个校验码：RST-重新发送链接、ACK-确认、FIN-关闭连接、PSH-接收端应用程序应当立即从TCP接收缓冲区读走数据、URG-紧急指针、SYN-建立连接</p><p>16位窗口大小：主要是响应端要告知发送端当前TCP网路缓冲区还能够接纳多少个字节数据。</p><p>16位CRC校验和：表示TCP报文段执行CRC校验，校验包含头部与数据。</p><p>16位紧急指针：正偏移量，和序号字段的值相加表示最后一个紧急数据的下一个字节序号，也就是当前序号的偏移量，发送紧急数据需要使用。</p><p>TCP头部选项：最多包含40个字节，可变长的可选信息。</p><h4 id="_1-1、tcp三次握手" tabindex="-1"><a class="header-anchor" href="#_1-1、tcp三次握手" aria-hidden="true">#</a> 1.1、TCP三次握手</h4><p><a href="https://blog.csdn.net/stpeace/article/details/74019019?spm=1001.2101.3001.6661.1&amp;utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&amp;utm_relevant_index=1" target="_blank" rel="noopener noreferrer">为什么tcp建立连接是三次握手而不是两次握手或者四次握手？（笔试面试常考）<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>、<a href="https://blog.csdn.net/lengxiao1993/article/details/82771768" target="_blank" rel="noopener noreferrer">TCP 为什么三次握手而不是两次握手（正解版）<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p>三次握手过程：</p><p>三次握手：主要围绕着ACK、SYN、序列号以及确认号来进行展开的。</p><p>1、主机A向主机B发送请求，携带一个随机产生的序列号，SYN=1.</p><p>2、主机B收到了A的请求进行确认，接着主机B向A发送请求，其中携带的确认号是A发送的序列号+1，并又随机产生了一个序列号，ACK=1、SYN=1 3、主机A收到了主机B的请求对确认号进行校验，此时会再次发送给主机B一个随机序列号以及确认号、ACK=1</p><p>至此通过三次握手来建立了起了连接。</p><p>第二次握手的时候，为什么要传回SYN？ 告诉客户端，服务器端收到的消息确实是客户端发送的信号，SYN 是 <strong>TCP/IP 建立连接时使用的握手信号</strong>。在客户机和服务器之间建立正常的 TCP 网络连接时，客户机首先发出一个 SYN 消息，服务器使用 SYN-ACK 应答表示接收到了这个消息，最后客户机再以ACK来进行确认。</p><p>为啥要三次？ 在三次握手里面，无论是client还是server都有一个发和收syn的以及校验确认号的一个过程，此时双方都表示能发、能收，表示大家都能够建立通信。</p><p>为啥不能二次？ 二次的话就是client发送一个请求，然后server就直接响应一个请求此时就建立连接了，这是有问题的，在特定情况下可能会产生无用的连接造成资源浪费的情况。例如client发送了一个请求连接，而此时由于网络延迟、阻塞相关问题，迟迟没有到达server端，那么client迟迟没有收到响应，那么就会尝试重新发送一个连接，发送连接之后之前阻塞的连接到达了server端建立了连接，紧接着后发的一个连接也来到了，此时也会创建连接，那么就是一个死连接，而一个进程的socket建立的连接的资源是有限的，维护这些死连接是十分耗费资源的。</p><p>为啥不能四次？ 因为三次的话双方都可以确认之前的通信情况，对于四次连接相当于server端会做第二次确认，而server不能够确认client对于它第二次发起响应的确认，三次以上就做的连接就是徒劳了。</p><h4 id="_1-2、tcp的四次挥手" tabindex="-1"><a class="header-anchor" href="#_1-2、tcp的四次挥手" aria-hidden="true">#</a> 1.2、TCP的四次挥手</h4><p><a href="https://blog.csdn.net/weixin_42489424/article/details/122326201" target="_blank" rel="noopener noreferrer">TCP四次挥手<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p><a href="https://blog.csdn.net/MrLiar17/article/details/118896290" target="_blank" rel="noopener noreferrer">TCP的四次挥手及为什么要等待2MSL<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p>1、client向server发送FIN=1以及seq来进行关闭连接。</p><p>2、Server此时收到了client的关闭连接时，会首先发送给client报文为ACK=1以及seq与ack确认号来表示收到了关闭连接的请求。 注意此时server不会立即关闭socket，因为这种情况下数据肯定还没有全部传完，在server发送接收到关闭请求响应时，会进入到<strong>CLOSE-WAIT</strong>状态，这个状态就是为了让服务器发送还没有全部传输完毕的数据。 中途数据传送....</p><p>3、数据传送完毕之后，服务器会发送FIN=1、ACK=1以及seq和ack确认号，此时进入到<strong>LAST_ACK</strong>状态。</p><p>4、client接收到server的FIN确认后会进入到<strong>TIME_WAIT</strong>状态，接着发送一个ACK给server。</p><p>在2*MSL之后，client会由<strong>TIME_WAIT</strong>状态变为<strong>closed</strong>状态；server接收到确认信号后也会由close_wait转变为closed状态。最终结束。</p><p>在Client发送最后一个ACK后，为什么要进入TIME_WAIT之后再CLOSED？</p><ol><li>确保Server有足够的时间接收到该ACK包。如果Server未能收到ACK包则会重发FIN报文，来回正好2*MSL时间。</li><li>避免新旧连接混淆</li></ol><p>为什么要等2MSL的时间？</p><p>MSL最长报文段寿命Maximum Segment Lifetime，这个时间时任何报文在网络上的最长时间，超过这个时间报文会被丢弃。4分钟就是2个MSL，每个MSL是2分钟，这个是时间是官方RFC协议规定的。</p><p>保证A发送的最后一个ACK报文段能够到达B。2）防止“已失效的连接请求报文段”出现在本连接中。 ①最后client的ACK报文很有可能丢失，导致server端在LAST_ACK状态一直收不到确认，此时server会进行超时重传FIN、ACK包，而client则会在这个2MSL时间内收到并进行重新确认再重新计时2MSL，直至最终都释放连接。【若是没有这个等待机制，那么会导致最终server不会进入到closed状态，会不断进行重发】 ②A在发送完最后一个ACK报文段后，再经过2MSL，就可以使本连接持续的时间内所产生的所有报文段都从网络中消失，使下一个新的连接中不会出现这种旧的连接请求报文段。</p><p>那么为什么不能是三次挥手呢？中间的两个部分为什么不能一起发送呢？ 相对于三次握手，四次挥手中server响应实际上是有两次，第一次主要表示已经收到client的关闭请求，此时server进入last_ack状态，之后发送的FIN-ACK实际上是在数据都发送之后才发起的确认关闭连接，表示数据已经发送完毕，也是这个原因才有的四次挥手。</p><p><a href="https://blog.csdn.net/m673010624/article/details/99703200?spm=1001.2101.3001.6661.1&amp;utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&amp;utm_relevant_index=1" target="_blank" rel="noopener noreferrer">2MSL到底有多长<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p>4分钟就是2个MSL，每个MSL是2分钟。MSL就是<code>maximium segment lifetime</code>——最长报文寿命。这个时间是由官方RFC协议规定的。至于为什么是2个MSL而不是1个MSL，我还没有看到一个非常满意的解释。</p><p>四次挥手也并不总是四次挥手，中间的两个动作有时候是可以合并一起进行的，这个时候就成了三次挥手，主动关闭方就会从<code>fin_wait_1</code>状态直接进入到<code>time_wait</code>状态，跳过了<code>fin_wait_2</code>状态。</p><h4 id="_1-3、tcp如何保证可靠传输" tabindex="-1"><a class="header-anchor" href="#_1-3、tcp如何保证可靠传输" aria-hidden="true">#</a> 1.3、TCP如何保证可靠传输？</h4><p>先，TCP 的连接是基于三次握手，而断开则是四次挥手。确保连接和断开的可靠性。 其次，TCP 的可靠性，还体现在有状态;TCP 通过<code>校验和</code>、<code>ACK 应答</code>、<code>超时重传</code>来记录哪些数据发送了，哪些数据被接受了，哪些没有被接受，并且保证数据包按序到达，保证数据传输不出差错。 再次，TCP 的可靠性，还体现在可控制。通过<code>流量控制（滑动窗口）</code>和<code>拥塞控制</code>来控制发送方发送速率。</p><blockquote><p>校验和</p></blockquote><p>目的：检查数据是否已经正确到达目的地，只是单纯为了做校验用的。</p><p>检验方式：在发送方将整个报文段分为多个16位的段，然后将所有段进行反码相加，将结果存放在检验和字段中，接收方用相同的方法进行计算，如最终结果为检验字段所有位是全1则正确，否则存在错误。</p><blockquote><p>确认应答与序列号</p></blockquote><p>确认号：TCP将每个数据包都进行了编号。</p><p>作用：①保证可靠性（当接收到的数据总少了某个序号的数据时，能马上知道）。②保证数据的按序到达。③提高效率，可实现多次发送，一次确认。④去除重复数据。</p><p>引申用途：确认<strong>应答处理、重发控制以及重复控制</strong>等功能都可以通过序列号来实现。</p><blockquote><p>功能</p></blockquote><p><code>超时重传</code>：发送方在发送完数据后等待一段时间，若是在时间内没有接收到ACK报文，就对刚才发送的数据进行重新发送。</p><p><code>连接管理</code>：三次握手、四次挥手。</p><p><code>流量控制</code>：TCP根据接收端对数据的处理能力，通过使用16位窗口大小来决定发送端的发送速度。</p><ul><li>在TCP协议的报头信息中，有16位字段窗口，发送端根据ACK报文的窗口大小值改变而改变自己的发送速度。</li></ul><p><code>拥塞控制</code>：慢开始、拥塞避免、快重传、快恢复</p><ul><li>慢开始：一开始不发送大量数据，先探测一下网络的拥塞程度，之后由小到大增加拥塞窗口大小。</li><li>拥塞避免：根据拥塞避免算法来让拥塞窗口慢慢增长，每经过一个往返时间RTT就把发送发的拥塞窗口cwnd+1，而不是加倍，这样拥塞窗口会按照线性速度增长。</li><li>快重传与快恢复：发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段，而不必继续等待设置的重传计时器时间到期。</li></ul><h4 id="_1-4、tcp网络为什么要进行拥塞控制" tabindex="-1"><a class="header-anchor" href="#_1-4、tcp网络为什么要进行拥塞控制" aria-hidden="true">#</a> 1.4、TCP网络为什么要进行拥塞控制？</h4><blockquote><p><a href="https://www.elecfans.com/d/1308617.html" target="_blank" rel="noopener noreferrer">为何要进行拥塞控制？如何知道网络的拥塞情况？<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p><strong>防止过多的数据注入到网络中，导致网络的阻塞</strong>。 几种拥塞控制方法：慢开始( slow-start )、拥塞避免( congestionavoidance )、快重传( fast retransmit )和快恢复( fast recovery )。</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206261856676.png" alt="image-20220626185639568" loading="lazy"></p><p><strong>场景</strong>：此时有太多主机正在使用信道资源，导致网络拥塞了，而A发送的数据包被堵在了半路，迟迟没有到达B。这个时候A误认为是发生了丢包情况，会重新传输这个数据包。结果就是<strong>不仅浪费了信道资源，还会使网络更加拥塞</strong>。因此，我们需要进行拥塞控制。</p><h5 id="慢开始" tabindex="-1"><a class="header-anchor" href="#慢开始" aria-hidden="true">#</a> 慢开始</h5><p>把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后，把拥塞窗口增加至多一个MSS的数值。每经过一个传输轮次，拥塞窗口 cwnd 就加倍。 为了防止拥塞窗口cwnd增长过大引起网络拥塞，还需要设置一个慢开始门限ssthresh状态变量。</p><p>当 cwnd &lt; ssthresh 时，使用慢开始算法。</p><p>当 cwnd &gt; ssthresh 时，停止使用慢开始算法而改用拥塞避免算法。</p><p>当 cwnd = ssthresh 时，既可使用慢开始算法，也可使用拥塞控制避免算法。</p><h5 id="拥塞避免" tabindex="-1"><a class="header-anchor" href="#拥塞避免" aria-hidden="true">#</a> 拥塞避免</h5><p>让拥塞窗口cwnd缓慢地增大，每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1，而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长。</p><p>无论在慢开始阶段还是在拥塞避免阶段，<strong>只要发送方判断网络出现拥塞（其根据就是没有收到确认），就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值的一半（但不能小于2）</strong>。然后把拥塞窗口cwnd重新设置为1，执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数，使得发生 拥塞的路由器有足够时间把队列中积压的分组处理完毕。</p><h5 id="快重传" tabindex="-1"><a class="header-anchor" href="#快重传" aria-hidden="true">#</a> 快重传</h5><p>有时个别报文段会在网络中丢失，但实际上网络并未发生拥塞。如果发送方迟迟收不到确认，就会产生超时，就会误认为网络发生了拥塞。这就导致发送方错误地启动慢开始，把拥塞窗口cwnd又设置为1，因而降低了传输效率。</p><p>快重传算法可以避免这个问题。快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认，使发送方及早知道有报文段没有到达对方。</p><p><strong>发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段</strong>，而不必继续等待重传计时器到期。由于发送方尽早重传未被确认的报文段，因此采用快重传后可以使整个网络吞吐量提高约20%。</p><h5 id="快恢复" tabindex="-1"><a class="header-anchor" href="#快恢复" aria-hidden="true">#</a> 快恢复</h5><p>当发送方连续收到<strong>三个重复确认</strong>，就会把慢开始门限ssthresh减半，接着把cwnd值设置为慢开始门限ssthresh减半后的数值，然后开始执行拥塞避免算法，使拥塞窗口缓慢地线性增大。</p><p>在采用快恢复算法时，<strong>慢开始算法只是在TCP连接建立时和网络出现超时时</strong>才使用。 采用这样的拥塞控制方法使得TCP的性能有明显的改进。</p><h4 id="_1-5、tcp的滑动窗口细节" tabindex="-1"><a class="header-anchor" href="#_1-5、tcp的滑动窗口细节" aria-hidden="true">#</a> 1.5、TCP的滑动窗口细节</h4><blockquote><p><a href="https://www.bilibili.com/video/BV1FE411C7dk?spm_id_from=333.337.search-card.all.click" target="_blank" rel="noopener noreferrer">tcp滑动窗口的完美解释—动画演示<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p><a href="https://www.bilibili.com/video/BV1QL411g7gE?spm_id_from=333.337.search-card.all.click" target="_blank" rel="noopener noreferrer">慕课—TCP滑动窗口<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>TCP中的<strong>可靠传输、流量控制</strong>都是依靠滑动窗口来进行的。 TCP会话的双方都各自维护一个发送窗口和一个接收窗口。</p><p>在三次连接过程中会进行窗口大小的确认，发送端与接收端要确认窗口的大小(实际就是缓冲区)，若是发送端为8k、接收端是4k，此时他们一定要统一相同的缓冲区大小，如何确认一样就是要选择二者之间最小的大小。</p><p>当发送了五个报文之后，对方就会进行回数据表示收到多少，是有定时器和触发机制的，触发机制之后会发一个确认，并不是你每发一个就回一个，也有可能发送五个回2两个，确认好了之后窗口就会进行滑动。</p><p>详细过程：</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>解释： 接受和发送都有一个滑动窗口，本案例是5 SIZE
1，发送一次送5个数据包，接受窗口收到包后发送收到信号给发送端
2.如果接受端没有顺序收到包，或者丢包，发送端是不会收到确认信号，则发送端会重发
3.当接受端滑动窗口都是接受到（buffered）或者前面是有效顺序接受包，则滑动窗口滚动
4.发送窗口也会依据确认信号滚动，保持和接受窗口同步。。。。
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>既然有了滑动窗口，那么ack确认就会发生变化。</p><ul><li>以前方式：接受了多少个请求就回多少个。</li><li>现在delay ack：就是会有计时优化。</li></ul><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204221648787.png" alt="image-20220422164803698" loading="lazy"></p><p>实际上在进行三次握手过程中就有传递窗口大小以及双方最大存储数量：win表示窗口大小、mss表示后面的数据报文最大可以存多少数据。</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204221647129.png" alt="image-20220422164701010" loading="lazy"></p><blockquote><p>精炼</p></blockquote><p>主要解决的是<strong>流量控制</strong>的问题。</p><p>发送方与接收方在操作系统中都会维护一块相同的缓冲区。这个缓冲区的大小是在三次握手过程中双方进行确认的，因为双方缓冲区大小不一致所以会选择相对最小缓冲区大小。</p><p>以前发送报文的方式是client发送一个请求，接着服务端就响应一次，如今引入了滑动窗口之后就是会有计时机制，会在对应时间点来统一进行响应，若是client发送的包中有丢掉的记录，那么这些信息会在响应中有体现，在响应时，若是前面按照顺序的位置都接收到了那么就会滑动窗口，同理client接收到响应的信息也会进行滑动窗口与server保持一直，并且会对丢掉的包进行重传，之后依次往复。</p><h4 id="_1-6、tcp的黏包问题" tabindex="-1"><a class="header-anchor" href="#_1-6、tcp的黏包问题" aria-hidden="true">#</a> 1.6、TCP的黏包问题</h4><p>TCP粘包：就是指发送方发送的若干包数据到达接收方时粘成了一包，从接收缓冲区来看，后一包数据的头紧接着前一包数据的尾，出现粘包的原因是多方面的，可能是来自发送方，也可能是来自接收方。</p><p>原因：</p><ol><li><p>发送方原因：TCP默认使用Nagle算法（主要作用：减少网络中报文段的数量），而Nagle算法主要做两件事：</p><p>①只有上一个分组得到确认，才会发送下一个分组；②收集多个小分组，在一个确认到来时一起发送。</p></li><li><p>客户端问题：TCP接收到数据包时，并不会马上交到应用层进行处理，或者说应用层并不会立即处理。实际上，TCP将接收到的数据包保存在接收缓存里，然后应用程序主动从缓存读取收到的分组。这样一来，如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度，多个包就会被缓存，应用程序就有可能读取到多个首尾相接粘到一起的包。</p></li></ol><p>何时需要处理：</p><p>1、如果发送方发送的多组数据本来就是同一块数据的不同部分，比如说一个文件被分成多个部分发送，这时当然不需要处理粘包现象。</p><p>2、如果多个分组毫不相干，甚至是并列关系，那么这个时候就一定要处理粘包现象了。</p><p>如何处理：</p><ul><li>发送方：关闭Nagle算法，TCP_NODELAY选项来关闭算法。</li><li>接收方：接收方没有办法来处理粘包现象，只能将问题交给应用层来处理。</li><li>应用程序：短链接；指定字节长度；分隔符；基于长度字段的帧解码器。</li></ul><blockquote><p>UDP会不会产生粘包问题呢？</p></blockquote><p>UDP则是面向消息传输的，是有保护消息边界的，接收方一次只接受一条独立的信息，所以不存在粘包问题。</p><p>举个例子：有三个数据包，大小分别为2k、4k、6k，如果采用UDP发送的话，不管接受方的接收缓存有多大，我们必须要进行至少三次以上的发送才能把数据包发送完，但是使用TCP协议发送的话，我们只需要接受方的接收缓存有12k的大小，就可以一次把这3个数据包全部发送完毕。</p><ul><li>TCP为了保证可靠传输并减少额外的开销（每次发包都要验证），采用了基于流的传输，基于流的传输不认为消息是一条一条的，是无保护消息边界的（保护消息边界：指传输协议把数据当做一条独立的消息在网上传输，接收端一次只能接受一条独立的消息）。</li></ul><h4 id="_1-7、tcp与udp的区别" tabindex="-1"><a class="header-anchor" href="#_1-7、tcp与udp的区别" aria-hidden="true">#</a> 1.7、TCP与UDP的区别</h4><p>TCP： 面向连接，传数据控制协议，有流量控制、拥塞控制，支持全双工通信。在TCP结构中包含源目的地址、序列号、确认号、确认序列号、窗口大小、校验和以及数据。</p><p>UDP：无连接，用户数据报，没有拥塞控制，支持一对一、一对多的通信。</p><p>应用场景：确保用户信息不丢失要使用TCP协议；若是对于传输快，并且数据量允许一些丢失，如视频聊天或直播，那么可以使用UDP协议。</p><h3 id="_2、quic协议" tabindex="-1"><a class="header-anchor" href="#_2、quic协议" aria-hidden="true">#</a> 2、QUIC协议</h3><blockquote><p>QUIC</p><p><a href="https://baike.baidu.com/item/QUIC/17341272?fr=aladdin" target="_blank" rel="noopener noreferrer">QUIC-百度百科<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>、<a href="https://blog.csdn.net/weixin_50870081/article/details/119826165" target="_blank" rel="noopener noreferrer">QUIC协议原理详解<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>介绍：谷歌制定的一种基于UDP的低时延的互联网传输层协议，2016年11月国际互联网工程任务组(IETF)召开了第一次QUIC工作组会议。实现了TCP + HTTPS + HTTP/2的功能，目的是保证可靠性的同时降低网络延迟。</p><p>原因：与<a href="https://baike.baidu.com/item/TCP%E5%8D%8F%E8%AE%AE/8988699" target="_blank" rel="noopener noreferrer">TCP协议<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>相比，UDP更为轻量，但是错误校验也要少得多。这意味着UDP往往效率更高（不经常跟服务器端通信查看数据包是否送达或者按序），但是可靠性比不上TCP。通常游戏、流媒体以及VoIP等应用均采用UDP，而网页、邮件、远程登录等大部分的应用均采用TCP。</p><p>特点：<strong>减少连接延迟，基于UDP实现，解决队头阻塞（避免了HTTP2的队头阻塞），加密减少握手次数，支持快速启动。</strong></p><p>比较TCP：当客户端第一次连接服务器时，QUIC只需要1RTT（Round-Trip Time）的延迟就可以建立可靠安全的连接,相对于TCP+TLS的1-3次RTT要更加快捷。</p><h2 id="_4、网路层协议" tabindex="-1"><a class="header-anchor" href="#_4、网路层协议" aria-hidden="true">#</a> 4、网路层协议</h2><h3 id="_4-1、ip头部结构" tabindex="-1"><a class="header-anchor" href="#_4-1、ip头部结构" aria-hidden="true">#</a> 4.1、IP头部结构</h3><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206141747837.png" alt="image-20220614174713762" loading="lazy"></p><p>IP数据报为上层提供无状态、无连接、不可靠的服务。</p><p>32位源目的IP地址、32位目的IP地址</p><h2 id="_5、cdn原理" tabindex="-1"><a class="header-anchor" href="#_5、cdn原理" aria-hidden="true">#</a> 5、CDN原理</h2><p>目的：提高访问速度。</p><p>1、用户访问主域名——2、解析到cdn节点——3、发现无此资源——4、访问源站服务器——5、访问源站对应的主机（网站目录）——6、取到资源，响应用户——7、缓存资源</p><h2 id="_6、ping和traceroute" tabindex="-1"><a class="header-anchor" href="#_6、ping和traceroute" aria-hidden="true">#</a> 6、ping和traceroute</h2><blockquote><p><a href="https://blog.csdn.net/qq_43223115/article/details/120167632" target="_blank" rel="noopener noreferrer">ping的工作原理<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>、<a href="https://blog.csdn.net/shida_csdn/article/details/83751645" target="_blank" rel="noopener noreferrer">ping 与 traceroute 的工作原理分析<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>ping：主要测试主机是否可达，发送ICMP回显请求报文给目的主机。</p><ul><li>ping是基于ICMP协议，没有端口概念</li><li>1、为什么 ping 第一次一般会产生更多耗时？第一次一般会进行ARP地址解析，通过IP地址获取对应的MAC地址存储到ARP缓存中。</li><li>过程：ping命令执行之后会发送一个ICMP包给主机，若是主机收到了的话也会回一个ICMP包表示可达。</li></ul><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204241738203.png" alt="image-20220424173827152" loading="lazy"></p><p>traceroute 程序的主要目的是获取从当前主机到目的主机所经过的路由。</p><ul><li>原理：主要时设置ttl来跳转到指定的路由器后来进行返回经过的路由器。</li></ul><h2 id="_7、服务器端口关闭了-客户端这时候发送报文-会发生什么" tabindex="-1"><a class="header-anchor" href="#_7、服务器端口关闭了-客户端这时候发送报文-会发生什么" aria-hidden="true">#</a> 7、服务器端口关闭了，客户端这时候发送报文，会发生什么？</h2><blockquote><p><a href="https://blog.csdn.net/weixin_42282999/article/details/114892588" target="_blank" rel="noopener noreferrer">服务端主动关闭，客户端继续写，会发生什么？<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>若是服务器端主动关闭，那么四次挥手就会颠倒。此时客户端发送一个请求，根据TCP协议和i认为其是一个异常终止连接，客户端会收到一个<strong>RST复位响应</strong>，接着客户端再向服务器端发送一个<strong>SIGPIPE信号给客户端告诉客户端进程连接已经关闭</strong>，不要再写了，此时客户端会停止。</p><ul><li>如果不希望客户端进程被终止，可以<code>自定义一个该信号处理的函数</code>，通过调用函数signal(SIGPIPE, handler)实现对信号的处理，其中handler就是可以自定义的函数。</li></ul><p>总结：服务端主动关闭，客户端继续写两次将会导致客户端进程被终止(服务端并不能接收)，<code>客户端不能向服务器写入数据</code></p><h2 id="_8、服务器如何感知客户端掉线" tabindex="-1"><a class="header-anchor" href="#_8、服务器如何感知客户端掉线" aria-hidden="true">#</a> 8、服务器如何感知客户端掉线？</h2><p><strong>问题描述</strong>：客户端到服务端的中间网络节点的<a href="https://so.csdn.net/so/search?q=%E8%B7%AF%E7%94%B1%E5%99%A8&amp;spm=1001.2101.3001.7020" target="_blank" rel="noopener noreferrer">路由器<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a>里面的报文非常多，网络拥塞非常严重，导致FIN包到达不了服务端。</p><ul><li>TCP协议下，发送的每一个包都会去等待这个包的响应，如果没有响应，会超时重传，但是超时重传是有一定的次数，如果超过次数，TCP就会reset把socket重置了，但是还是导致这个FIN包最终还是没有到达服务端，导致这个客户端已经下线了，但是服务端并没有感知到，客户端已经自己重置了，服务端却一直以为这个客户端在线，把这个客户端所给的socketfd没有释放，相关的其他资源也没有释放，就积累越来越多的僵客户端连接。</li></ul><p><strong>TCP解决方案</strong>：TCP协议里，增加了keepalive这个功能，是在传输层添加的这个功能。和应用层没有关系。</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>net.ipv4.tcp_keepalive_time=7200：默认每隔2个小时，会发送一个空的报文段，探测对方是否在线：如果对方回复了，证明对方还在线，链路还是有效的。如果对方并没有响应，
net.ipv4.tcp_keepalive_invl=75：如果探测没有响应，延迟75秒继续发送保活的探测包。
net.ipv4.tcp_keepalive_probes=9：如果依旧是没有响应的话，最多重新探测9次，如果都没有响应，就拆除连接！！！证明这个连接确实是挂掉了。
也就是最多等待2小时+75x9 秒，如果一直没有响应，就把连接给拆除了
这个参数是可以更改的，可以把时间调小一点。
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>对于应用层不建议使用TCP的keepalive来保障是否掉线</strong>：长连接的C/S是不可能依靠TCP传输层的keepalive功能做连接保活机制的。也就是我们实际的cs业务开发对于借助TCP是不太好的。</p><ul><li>①仅仅是靠tcp的keepalive，若是连接中断，因为是在传输层只能把TCP的连接拆除，由于我们是应用层，在业务服务器里还有connection对象存在map中，这些都需要进行删除。</li><li>②假设我们应用层已经运行到死锁了，出问题了，已经做不了业务了，但是这只是应用层的死锁，传输层是属于操作系统内核的，内核是不会死锁的，socket在内核中依然可以和服务端发送keepalive探测包的，这就出问题了，导致服务端还是认为客户端在线的！！！</li></ul><p><strong>自己实现解决方案</strong>：心跳机制！！！服务端会给每一个connect成功的客户端分配一个心跳计数。</p><ul><li>客户端都是通过TCPsocket来和服务端进行通信，心跳为了不干扰我们的业务处理，专门用UDPsocket绑定8080端口，或者我们可以绑定其他的心跳端口，专门接收心跳消息，</li></ul><h2 id="_9、有哪些网络攻击方式-该怎么防范" tabindex="-1"><a class="header-anchor" href="#_9、有哪些网络攻击方式-该怎么防范" aria-hidden="true">#</a> 9、有哪些网络攻击方式，该怎么防范?</h2><blockquote><p><a href="https://baijiahao.baidu.com/s?id=1712041656524695859&amp;wfr=spider&amp;for=pc" target="_blank" rel="noopener noreferrer">10个常见网站安全攻击手段及防御方法<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><ol><li><p>跨站脚本（XSS）</p></li><li><p>sql注入攻击</p></li><li><p>模糊测试：输入大量<strong>随机数据即模糊数据</strong>。</p></li><li><p>零日攻击：模糊攻击的扩展，但不要求识别漏洞本身。</p></li><li><p>路径，目录遍历：针对Web root文件夹，访问目标文件夹外部的未授权文件或目录。攻击者试图将移动模式注入服务器目录，以便向上爬升。成功的路径遍历攻击能够获得网站访问权，染指配置文件、数据库和同一实体服务器上的其他网站和文件。</p></li><li><p>分布式拒绝服务（DDoS）：DDoS旨在用请求洪水压垮目标Web服务器，让其他访客无法访问网站。僵尸网络通常能够利用之前感染的计算机从全球各地协同发送大量请求。而且，DDoS攻击常与其他攻击方法搭配使用；攻击者利用DDoS攻击吸引安全系统火力，从而暗中利用漏洞入侵系统。</p><ul><li>解决方案：通过内容分发网络（CDN）、负载均衡器和可扩展资源缓解高峰流量。其次，需部署Web应用防火墙（WAF），防止DDoS攻击隐蔽注入攻击或跨站脚本等其他网络攻击方法。</li></ul></li><li><p>中间人攻击：攻击者利用中间人类型的攻击收集信息，通常是敏感信息。数据在双方之间传输时可能遭到恶意黑客拦截，如果数据未加密，攻击者就能轻易读取个人信息、登录信息或其他敏感信息。</p><ul><li>解决方案：在网站上安装安全套接字层（SSL）就能缓解中间人攻击风险。SSL证书加密各方间传输的信息，攻击者即使拦截到了也无法轻易破解。现代托管提供商通常已经在托管服务包中配置了SSL证书。</li></ul></li><li><p>暴力破解攻击：攻击者试图猜解用户名和密码对，以便登录用户账户。当然，即使采用多台计算机，除非密码相当简单且明显，否则破解过程可能需耗费几年时间。</p></li><li><p>网络钓鱼：标准工具就是电子邮件，伪装成其他人，诱骗受害者给出敏感信息或执行银行转账。</p></li></ol><h2 id="_10、在浏览器中输入-url-地址-显示主页的过程" tabindex="-1"><a class="header-anchor" href="#_10、在浏览器中输入-url-地址-显示主页的过程" aria-hidden="true">#</a> 10、在浏览器中输入 url 地址 -&gt;&gt; 显示主页的过程</h2><p>其实核心就是打开一个网页，整个过程会使用哪些协议？</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206141925316.png" alt="image-20220614192514203" loading="lazy"></p><p>总体来说分为以下几个过程:</p><ol><li>DNS 解析</li><li>TCP 连接</li><li>发送 HTTP 请求</li><li>服务器处理请求并返回 HTTP 报文</li><li>浏览器解析渲染页面</li><li>连接结束</li></ol><h2 id="_11、cookie-的作用是什么-和-session-有什么区别" tabindex="-1"><a class="header-anchor" href="#_11、cookie-的作用是什么-和-session-有什么区别" aria-hidden="true">#</a> 11、Cookie 的作用是什么? 和 Session 有什么区别？</h2><p>Cookie 一般用来保存用户信息，例如token。</p><p>Session 的主要作用就是通过服务端记录用户的状态。</p><p>区别：Cookie 数据保存在客户端(浏览器端)，Session 数据保存在服务器端。</p><p>说明：Cookie 存储在客户端中，而 Session 存储在服务器上，相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息，不要直接写入 Cookie 中，最好能将 Cookie 信息加密，然后使用到的时候再去服务器端解密。</p><h3 id="_12、uri-和-url-的区别是什么" tabindex="-1"><a class="header-anchor" href="#_12、uri-和-url-的区别是什么" aria-hidden="true">#</a> 12、URI 和 URL 的区别是什么?</h3><p>两者区别：</p><ul><li>URI(Uniform Resource Identifier) 是统一资源<strong>标志符</strong>，可以唯一标识一个资源。</li><li>URL(Uniform Resource Locator) 是统一资源<strong>定位符</strong>，可以提供该资源的路径。它是一种具体的 URI，即 URL 可以用来标识一个资源，而且还指明了如何 locate 这个资源。</li></ul><p>URI 的作用像身份证号一样，URL 的作用更像家庭住址一样。URL 是一种具体的 URI，它不仅唯一标识资源，而且还提供了定位该资源的信息。</p><hr><p>整理者：长路 时间：2022.6.14</p></div><!----><footer class="page-meta"><div class="meta-item edit-link"><a href="https://gitee.com/changluJava/personal-reading/edit/main/demo/src/zh/interview/计算机网络.md" rel="noopener noreferrer" target="_blank" aria-label="编辑此页" class="nav-link label"><!--[--><svg xmlns="http://www.w3.org/2000/svg" class="icon edit-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="edit icon"><path d="M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"></path><path d="M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"></path></svg><!--]-->编辑此页<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></div><!----><!----></footer><nav class="page-nav"><a href="/zh/interview/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1.html" class="nav-link prev" aria-label="系统设计"><div class="hint"><span class="arrow left"></span>上一页</div><div class="link"><span class="icon iconfont icon-lock" style=""></span>系统设计</div></a><a href="/zh/interview/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.html" class="nav-link next" aria-label="设计模式"><div class="hint">下一页<span class="arrow right"></span></div><div class="link">设计模式<!----></div></a></nav><div class="giscus-wrapper input-top" style="display:block;"><div style="text-align:center">Loading...</div></div><!----><!--]--></main><!--]--><footer class="footer-wrapper"><div class="footer">默认页脚</div><div class="copyright">Copyright © 2022 长路</div></footer><!--]--></div><!--]--><!----><!--]--></div>
    <script type="module" src="/assets/app.e732cc94.js" defer></script>
  </body>
</html>
